/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package worms;

public class GameGrid {

    private int hauteur = 11;
    private int largeur = 11;
    private Object[][] map;

    //genrerate
    public GameGrid() {

        map = new Object[this.hauteur][this.largeur];

        map = new Object[this.largeur][this.hauteur];

        createMap();

    }

    //methode
    private void createMap() {
        for (int j = 0; j < this.hauteur; j++) {
            for (int i = 0; i < this.largeur; i++) {
                if (j == 0) {
                    this.map[i][j] = i;
                } else {
                    if (i == 0) {
                        if (j > 0) {
                            this.map[i][j] = j;
                        }
                    } else {
                        this.map[i][j] = '*';
                    }
                }


            }
        }

    }

    public void addMap(Object name, int x, int y) {
        try {
            switch (name.getClass().getName()) {
                case "worms.Ammo":
                    this.map[x][y] = 'M';
                    break;
                case "worms.Life":
                    this.map[x][y] = 'V';
                    break;
                case "worms.Warior":
                    this.map[x][y] = 'O';
                    break;
                default:
                    this.map[x][y] = ' ';
                    break;
            }
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println(e.getMessage());
        }

    }

    public void deleteMap(Object name, int x, int y) {
        try {
            switch (name.getClass().getName()) {
                case "worms.Ammo":
                    this.map[x][y] = '*';
                    break;
                case "worms.Life":
                    this.map[x][y] = '*';
                    ;
                    break;
                case "worms.Warior":
                    this.map[x][y] = '*';
                    ;
                    break;
                default:
                    this.map[x][y] = ' ';
                    break;

            }


        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println(e.getMessage());

        }

    }

   

    public void printMap(Player joueur) {
        for (int j = 0; j < this.hauteur; j++) {
            for (int i = 0; i < this.largeur; i++) {
                if (j == 10 && i == 0) {
                    System.out.print(this.getMap()[i][j] + " ");
                } else {
                    System.out.print(this.getMap()[i][j] + "  ");
                }
                if (j == this.hauteur - 1 && i == this.largeur - 1) {
                    if (joueur.getAssaut().getVie() <= 0) {
                        System.out.print("\tVie Assaut : mort");
                    } else {
                        System.out.print("\tVie Assaut : " + joueur.getAssaut().getVie());
                    }
                }
                if (j == this.hauteur - 2 && i == this.largeur - 1) {
                    if (joueur.getSniper().getVie() <= 0) {
                        System.out.print("\tVie Sniper : mort");
                    } else {
                        System.out.print("\tVie Sniper : " + joueur.getSniper().getVie());
                    }
                }
                if (j == this.hauteur - 5 && i == this.largeur - 1) {
                    System.out.print("\tRappel : tir de Sniper: 0-70 dégats");
                }
                if (j == this.hauteur - 4 && i == this.largeur - 1) {
                    System.out.print("\t         tir de Assaut: 0-30 dégats x2");
                }
                if (j == this.hauteur - 8 && i == this.largeur - 1) {
                    System.out.print("\t Worms vivants: " + joueur.getNumberOfWormsAlive());
                }
            }
            System.out.println();


        }
    }

    public int caseVide(int x, int y) {
        if (this.getMap()[x][y] == '*') {
            return 1;
        } else {
            return 0;
        }
    }

    public int getHauteur() {
        return this.hauteur - 1;
    }

    public int getLargeur() {
        return this.largeur - 1;
    }

    public Object getMap(int x, int y) {
        return this.getMap()[x][y];
    }

    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }

    public void setHauteur(int hauteur) {
        this.hauteur = hauteur;
    }

    /**
     * @param largeur the largeur to set
     */
    public void setLargeur(int largeur) {
        this.largeur = largeur;
    }

    /**
     * @return the map
     */
    public Object[][] getMap() {
        return map;
    }
}
